#include <iostream>
#include <string>

using namespace std;

class CompanyA
{
public:
    void sendCleartext(const std::string &msg);
    void sendEncrypted(const std::string &msg);
};

class CompanyZ
{
public:
    void sendCleartext(const std::string &msg);
    void sendEncrypted(const std::string &msg);
};

class MsgInfo
{};

template <typename Company>
class MsgSender
{
public:
    void sendClear(const MsgInfo &info)
    {
        std::string msg;
        Company c;
        c.sendCleartext(msg);
    }

    void sendSecret(const MsgInfo &info)
    {}
};

template<typename Company>
class LoggingMsgSender : public MsgSender<Company>
{
public:
    using MsgSender<Company>
    void sendClearMsg(const MsgInfo &info)
    {
        //Err
        sendClear(info);
        this->sendClear(info);

    }
};

template <>
class MsgSender<CompanyZ>
{
public:
    void sendSecret(const MsgInfo &info)
    {}
};

int main(int argc, char *argv[])
{
    return 0;
}
